자바 SE
1. 개요
1. 개요
자바 플랫폼 스탠더드 에디션은 데스크톱 및 서버 환경, 그리고 고사양 임베디드 시스템을 위한 표준 자바 플랫폼이다. 이 에디션은 자바 애플리케이션을 실행하기 위한 핵심 런타임 환경과 개발 도구를 제공하는 기반 플랫폼 역할을 한다. 자바 엔터프라이즈 에디션과 마이크로 에디션은 각각 특수한 목적에 맞추어 자바 스탠더드 에디션을 기반으로 확장되거나 축소된 형태로 정의된다.
자바 플랫폼에 에디션 분류가 도입된 것은 자바 1.2 버전부터이다. 초기에는 썬 마이크로시스템즈가 주도하여 설계하고 공개했으나, J2SE 1.4 버전 이후부터는 자바 커뮤니티 프로세스 주도하에 자바 명세 요청을 통해 포함될 API와 기능이 결정되는 개방형 표준화 과정을 거치고 있다. 이는 자바 기술의 발전이 더욱 공개적이고 협력적인 방식으로 이루어지도록 하는 데 기여했다.
자바 스탠더드 에디션의 핵심 구성 요소로는 자바 가상 머신 규격, 자바 개발 키트, 그리고 자바 런타임 환경이 있다. 여기에 포함된 풍부한 표준 API 라이브러리는 네트워킹, 보안, 데이터베이스 접근, XML 처리, 그래픽 사용자 인터페이스 구축 등 현대적인 소프트웨어 개발에 필요한 광범위한 기능을 지원한다. 이를 통해 개발자는 플랫폼에 독립적이면서도 강력한 애플리케이션을 구축할 수 있다.
2. 역사와 버전
2. 역사와 버전
자바 플랫폼 스탠더드 에디션의 역사는 자바 플랫폼 자체의 발전과 밀접하게 연결되어 있다. 에디션 분류가 처음 도입된 것은 자바 1.2 버전부터이다. 이전 자바 1.1과의 큰 차이를 강조하기 위해 '자바 2'라는 브랜드가 사용되었고, 이때 데스크톱 및 서버용 표준 플랫폼을 의미하는 자바 2 스탠더드 에디션(J2SE)이 공식적으로 출범했다. 이 명명 체계는 J2SE 1.4 버전까지 이어졌다.
버전 1.5에서는 명명 규칙이 J2SE 5.0으로 변경되었으며, 이후 버전 1.6부터는 현재와 같은 '자바 SE 6' 형태로 간소화되었다. 내부 버전 번호는 오랫동안 1.x.x 형식을 유지했으나, 자바 SE 9부터는 9.0.1과 같은 단순한 버전 번호 체계로 전환되었다. 초기 버전은 썬 마이크로시스템즈가 단독으로 설계하고 공개했지만, J2SE 1.4 이후부터는 자바 커뮤니티 프로세스 주도하에 개발 표준화가 이루어지기 시작했다.
주요 버전은 특정 자바 명세 요청 하에서 프로젝트명과 함께 개발되었다. 예를 들어, J2SE 5.0은 '타이거' 프로젝트명으로 JSR 176 하에, 자바 SE 6은 '무스탕' 프로젝트명으로 JSR 270 하에 개발되었다. 이러한 공개 협업 프로세스를 통해 자바 SE는 데스크톱, 서버, 그리고 고사양 임베디드 시스템을 위한 표준 플랫폼으로 성장해 왔다.
3. 주요 구성 요소
3. 주요 구성 요소
3.1. 자바 가상 머신
3.1. 자바 가상 머신
자바 가상 머신은 자바 플랫폼 스탠더드 에디션의 핵심 구성 요소이다. 이는 자바 애플리케이션이 특정 하드웨어나 운영체제에 종속되지 않고 실행될 수 있도록 하는 추상화된 컴퓨팅 환경을 제공한다. 자바 소스 코드로 작성된 프로그램은 자바 컴파일러에 의해 바이트코드라는 중간 형태로 컴파일되며, 이 바이트코드를 해석하고 실행하는 주체가 바로 자바 가상 머신이다. 자바 SE는 자바 가상 머신 규격 전체를 완벽하게 지원하며, 이 규격은 자바 애플리케이션의 이식성과 보안 모델의 기초가 된다.
자바 가상 머신의 주요 역할은 바이트코드를 실행 시간에 해당 시스템의 네이티브 코드로 변환하는 것이다. 이 변환 과정은 JIT 컴파일 방식으로 수행되어 성능을 최적화한다. 또한 가비지 컬렉션을 통해 사용되지 않는 메모리를 자동으로 회수하는 기능을 담당하여, 개발자가 메모리 관리에 대한 부담을 덜 수 있게 한다. 자바 SE에 포함된 리플렉션 API와 참조 객체 API는 이러한 JVM의 동작과 상호작용할 수 있는 수단을 제공한다.
자바 가상 머신 규격의 변경이나 확장이 필요한 새로운 기능은 일반적으로 자바 SE를 통해 먼저 제안되고 표준화된다. 이후 이 변경 사항은 자바 EE나 자바 ME와 같은 다른 에디션에 반영된다. 따라서 자바 SE의 JVM 구현은 전체 자바 에코시스템의 기준이 된다.
3.2. 자바 개발 키트
3.2. 자바 개발 키트
자바 개발 키트(Java Development Kit, JDK)는 자바 SE 플랫폼을 기반으로 애플리케이션과 애플릿을 개발하는 데 필요한 핵심 도구 모음이다. JDK에는 자바 컴파일러(javac), 자바 가상 머신(JVM), 자바 런타임 환경(JRE), 그리고 다양한 유틸리티와 디버깅 도구가 포함되어 있다. 개발자는 JDK를 설치하여 소스 코드를 바이트코드로 컴파일하고 실행할 수 있다.
JDK는 자바 SE의 공식 구현체로서, 오라클과 오픈소스 프로젝트인 OpenJDK를 통해 제공된다. 각 자바 SE 버전마다 대응하는 JDK 버전이 존재하며, 새로운 언어 기능과 API는 먼저 JDK에 구현되어 개발자에게 공개된다. 예를 들어, 람다 표현식과 스트림 API는 JDK 8에서 도입된 주요 기능이다.
JDK의 구성 요소 중 자바 런타임 환경(JRE)은 자바 프로그램을 실행하기 위한 최소 환경을 제공하는 반면, JDK는 여기에 개발 도구를 추가로 포함한다. 따라서 프로그램을 실행만 할 경우 JRE만으로 충분하지만, 새로운 자바 프로그램을 개발하고 빌드하려면 반드시 JDK가 필요하다. JDK 내의 핵심 라이브러리와 도구는 자바 언어 사양(JLS)과 자바 가상 머신 규격을 구현한다.
3.3. 자바 런타임 환경
3.3. 자바 런타임 환경
자바 런타임 환경은 자바 애플리케이션을 실행하기 위한 최소한의 구현을 제공하는 소프트웨어 패키지이다. 이 환경은 자바 가상 머신과 핵심 클래스 라이브러리로 구성되어 있으며, 자바 개발 키트에 포함되어 배포된다. 개발자가 아닌 최종 사용자는 애플리케이션을 실행하기 위해 자바 런타임 환경만 설치하면 된다. 자바의 핵심 철학인 "한 번 작성하면, 어디서나 실행된다"는 원칙은 이 런타임 환경이 다양한 운영 체제와 하드웨어 플랫폼 위에서 동일한 실행 환경을 보장하기 때문에 가능하다.
자바 런타임 환경의 핵심 구성 요소인 자바 가상 머신은 바이트코드를 해석하고 실행하는 엔진 역할을 한다. 이는 컴파일된 자바 프로그램이 특정 마이크로프로세서의 기계어에 의존하지 않고 중간 형태의 바이트코드로 배포될 수 있게 한다. 가상 머신은 또한 메모리 관리와 가비지 컬렉션을 담당하여 개발자가 명시적으로 메모리를 할당하고 해제하는 번거로움을 덜어준다. 함께 포함된 핵심 클래스 라이브러리는 입출력, 네트워킹, 보안, 데이터 구조 등 애플리케이션 개발에 필수적인 기본 기능들을 제공한다.
자바 런타임 환경은 자바 SE 플랫폼의 표준 구현체이다. 자바 EE와 같은 다른 에디션들은 이 표준 런타임 환경을 기반으로 웹 애플리케이션 서버나 분산 컴퓨팅을 위한 추가적인 API와 서비스를 층층이 쌓아 올리는 방식으로 구축된다. 역사적으로 자바 런타임 환경은 썬 마이크로시스템즈에 의해 개발 및 배포되었으나, 현재는 오라클과 오픈소스 프로젝트인 OpenJDK를 통해 제공되고 있다. 이는 자바 애플리케이션의 호환성과 이식성을 유지하는 데 중요한 기반이 된다.
4. 핵심 API
4. 핵심 API
4.1. 기본 API 패키지
4.1. 기본 API 패키지
자바 SE의 기본 API 패키지는 자바 프로그래밍의 핵심 기능을 제공하는 라이브러리들의 집합이다. 이 패키지들은 자바 가상 머신 위에서 동작하며, 데스크톱 및 서버 애플리케이션 개발에 필요한 가장 기본적인 도구들을 포함하고 있다. 모든 자바 EE 애플리케이션은 이 기본 API를 그대로 사용하며, 자바 ME는 이 중 일부만을 선택적으로 수용한다.
가장 핵심적인 패키지로는 java.lang이 있다. 이 패키지는 문자열을 다루는 String 클래스, 기본 데이터 타입의 래퍼 클래스, 그리고 스레드 관리와 관련된 Thread 클래스 등을 포함하여 자바 언어 자체와 밀접하게 연관된 클래스들을 제공한다. 또한 java.util 패키지는 컬렉션 프레임워크(리스트, 맵, 셋 등), 날짜 및 시간 관련 유틸리티, 랜덤 숫자 생성기 등 광범위한 편의 기능을 담고 있다.
입출력 처리를 위한 java.io 패키지는 파일 시스템과의 상호작용 및 다양한 스트림 기반의 데이터 입출력 모델을 정의한다. 네트워크 프로그래밍을 위한 java.net 패키지는 소켓 통신 및 URL 처리를 가능하게 한다. 데이터베이스 연동을 위한 표준 인터페이스인 JDBC는 java.sql 패키지에 정의되어 있다.
이외에도 수학 연산을 위한 java.math, 국제화 및 지역화를 지원하는 java.text, 보안 기능을 제공하는 java.security 등이 기본 API를 구성하는 중요한 패키지들이다. 이러한 패키지들의 이름은 대부분 'java'로 시작하며, 이는 자바 SE의 핵심 부분으로 처음부터 설계되었음을 의미한다.
4.2. UI 관련 API
4.2. UI 관련 API
자바 SE의 UI 관련 API는 주로 데스크톱 애플리케이션의 그래픽 사용자 인터페이스를 구축하기 위한 도구를 제공한다. 초기에는 AWT가 기본 GUI 툴킷으로, 운영체제의 네이티브 컴포넌트를 감싸는 방식으로 동작했다. 이후 더 풍부하고 유연한 컴포넌트 세트를 제공하는 스윙이 도입되어 AWT 위에 구축되었다. 이 두 계층은 자바의 데스크톱 애플리케이션 개발을 위한 근간을 이룬다.
UI 관련 기능은 여러 패키지로 세분화되어 제공된다. java.awt 패키지는 창 관리, 기본 2D 그래픽, 이벤트 처리 및 레이아웃 관리와 같은 핵심 서비스를 담당한다. javax.swing 패키지는 버튼, 테이블, 트리와 같은 순수 자바로 작성된 고급 GUI 컴포넌트 라이브러리를 포함한다. 또한 java.awt.datatransfer와 java.awt.dnd는 클립보드 및 드래그 앤 드롭 기능을, javax.accessibility는 접근성 지원을 위한 표준을 정의한다.
이 외에도 특수한 그래픽 및 미디어 처리를 위한 패키지들이 존재한다. java.awt.image 및 javax.imageio 계열의 패키지들은 이미지 처리와 JPEG, PNG 같은 다양한 형식의 이미지 파일 입출력을 지원한다. java.awt.print 패키지는 프린팅 기능을 제공하여 문서 출력을 가능하게 한다.
주요 패키지 | 핵심 기능 |
|---|---|
| 기본 창, 그래픽, 이벤트 |
| 고급 GUI 컴포넌트(버튼, 테이블 등) |
| 이미지 처리 및 입출력 |
| 프린팅 서비스 |
| 접근성 지원 인터페이스 |
이러한 API들은 자바를 이용한 크로스 플랫폼 데스크톱 소프트웨어 개발의 기반이 되며, 자바FX와 같은 최신 UI 프레임워크가 등장한 후에도 레거시 시스템 유지 보수 및 특정 애플리케이션 개발에 널리 사용되고 있다.
4.3. 입출력 API
4.3. 입출력 API
자바 SE의 입출력 API는 데이터의 흐름을 다루는 핵심 기능을 제공한다. 초기부터 스트림 기반의 입출력 모델을 정의한 java.io 패키지가 중심이었다. 이 패키지는 파일 시스템 접근과 다양한 데이터 소스 및 목적지에 대한 바이트 스트림과 문자 스트림을 처리하는 클래스들을 포함한다. 이를 통해 파일 입출력, 네트워크 통신, 그리고 이미지 처리 등 다양한 분야에서 일관된 방식으로 데이터를 읽고 쓸 수 있다.
자바 1.4 버전에서는 고성능 입출력을 위해 NIO가 도입되었다. java.nio 패키지는 버퍼와 채널이라는 새로운 추상화를 제공한다. 특히 논블로킹 입출력과 비동기 입출력을 지원하여, 단일 스레드로 다수의 연결을 효율적으로 처리할 수 있게 했다. 이는 서버 애플리케이션의 확장성과 성능을 크게 향상시켰다.
NIO는 java.nio.charset 패키지를 통해 다양한 문자 인코딩을 처리하는 기능도 강화했다. 자바 7에서는 NIO가 버전 2로 개선되어 java.nio.file 패키지가 추가되었다. 이는 파일 시스템에 대한 보다 강력하고 세밀한 제어를 가능하게 하며, 심볼릭 링크 처리와 파일 변경 감시 등의 고급 기능을 제공한다.
4.4. SPI 패키지
4.4. SPI 패키지
SPI 패키지는 자바 플랫폼 스탠더드 에디션의 API 중 하나로, Service Provider Interface의 약자이다. 이 패키지들은 표준 API에 새로운 기능이나 서비스를 추가할 수 있도록 설계된 인터페이스를 포함하고 있다. 패키지 이름은 주로 spi로 끝나며, 이는 해당 패키지가 확장 가능한 서비스 제공자 인터페이스를 정의하고 있음을 나타낸다.
예를 들어, 자바 2D 그래픽 시스템의 일부인 java.awt.im 패키지는 다양한 언어의 입력 방법을 처리하는 API를 제공한다. 이 API의 확장 포인트는 java.awt.im.spi 패키지에 정의되어 있어, 개발자가 새로운 언어를 위한 한글 입력 엔진이나 한자 입력 엔진과 같은 사용자 정의 입력 방법을 만들어 통합할 수 있게 한다. 이는 플러그인 아키텍처의 한 형태로, 핵심 플랫폼을 변경하지 않고도 기능을 확장할 수 있는 유연성을 제공한다.
이러한 SPI 패키지의 접근 방식은 자바 가상 머신의 모듈성과 확장성을 높이는 데 기여한다. 다른 예로는 네트워크 채널을 다루는 java.nio.channels.spi나 문자 인코딩을 처리하는 java.nio.charset.spi 등이 있으며, 각각 해당 분야의 표준 구현을 대체하거나 보완하는 서비스 제공자를 개발할 수 있는 틀을 마련해 준다.
5. 다른 자바 플랫폼과의 관계
5. 다른 자바 플랫폼과의 관계
5.1. 자바 엔터프라이즈 에디션
5.1. 자바 엔터프라이즈 에디션
자바 엔터프라이즈 에디션은 자바 플랫폼의 에디션 중 하나로, 자바 SE를 기반으로 확장된 플랫폼이다. 이 에디션은 주로 대규모 기업 환경에서 다중 계층 구조의 서버 애플리케이션을 개발하고 실행하기 위한 API와 런타임 환경을 제공한다. 자바 SE가 제공하는 핵심 기능 위에 웹 애플리케이션, 분산 컴퓨팅, 트랜잭션 처리, 메시징, 데이터베이스 접근 등을 위한 다양한 엔터프라이즈 기술이 추가되어 있다.
자바 EE는 자카르타 EE로 명칭이 변경되었다. 이는 자바 기술의 표준화를 주관하는 JCP 내에서의 관리 주체 변경과 커뮤니티 주도의 개발 모델로의 전환을 반영한 것이다. 자바 EE 플랫폼은 서블릿, JSP, EJB, JPA와 같은 핵심 스펙으로 구성되며, 이러한 스펙들은 각각 독립적인 JSR을 통해 정의되고 발전해 왔다.
자바 EE 애플리케이션은 일반적으로 웹 서버나 애플리케이션 서버 위에서 실행된다. 아파치 톰캣, 제이보스, 웹로직, 웹스피어와 같은 서버들은 자바 EE 스펙의 일부 또는 전체를 구현하여 제공한다. 개발자는 자바 EE를 통해 확장성과 안정성이 요구되는 금융, 통신, 전자상거래와 같은 분야의 복잡한 비즈니스 로직을 구현할 수 있다.
5.2. 자바 마이크로 에디션
5.2. 자바 마이크로 에디션
자바 마이크로 에디션은 자바 플랫폼 에디션 중 하나로, 스마트카드나 피처폰과 같이 제한된 자원을 가진 소형 임베디드 시스템 및 모바일 장치를 위한 플랫폼이다. 자바 SE를 기반으로 하지만, 메모리와 처리 능력이 부족한 환경에 맞춰 자바 가상 머신 규격과 API 집합을 축소하고 최적화한 것이 특징이다. 이를 통해 가전제품, 의료 기기, 산업 제어 시스템 등 다양한 분야의 장치에서 자바 애플리케이션을 실행할 수 있었다.
자바 ME는 구성과 프로파일이라는 개념을 도입하여 다양한 장치 유형을 지원했다. 구성은 가장 기본적인 자바 가상 머신 기능과 핵심 API 집합을 정의하며, 주로 CLDC와 CDC 두 가지가 사용되었다. 프로파일은 특정 장치 범주(예: 휴대전화, PDA)에 필요한 추가 API를 정의하여, 개발자가 해당 장치군에 맞는 애플리케이션을 작성할 수 있게 했다. 대표적인 프로파일로는 휴대전화용 MIDP가 있다.
이 플랫폼은 안드로이드와 iOS 같은 현대적 모바일 운영 체제가 등장하기 전까지 피처폰 시장에서 자바 기반 게임 및 애플리케이션의 주요 실행 환경 역할을 했다. 시간이 지나며 시장의 변화와 함께 그 중요성은 줄어들었지만, 제한된 리소스 환경을 위한 자바 플랫폼의 초기 구현체로서 역사적 의미를 지닌다.
6. 개발 및 표준화
6. 개발 및 표준화
6.1. JCP와 JSR
6.1. JCP와 JSR
자바 플랫폼 스탠더드 에디션의 개발과 표준화는 자바 커뮤니티 프로세스를 통해 이루어진다. JCP는 자바 기술의 표준을 정의하고 발전시키기 위해 설립된 공식 절차이다. 이 프로세스는 썬 마이크로시스템즈가 주도하던 초기 자바 개발 방식을 대체하여, 전 세계의 자바 커뮤니티 구성원들이 참여하는 개방형 협력 모델을 제공한다.
JCP 내에서 새로운 기능이나 기술 사양은 자바 스펙리케이션 리퀘스트의 형태로 제안된다. JSR은 자바 플랫폼에 추가될 특정 기술에 대한 공식 제안서이자 최종 명세서 역할을 한다. 예를 들어, J2SE 1.4는 JSR 59 하에, J2SE 5.0은 JSR 176 하에 개발되었다. 각 JSR은 전문가로 구성된 전문가 그룹이 작성하며, 공개 검토와 커뮤니티 투표를 거쳐 최종 승인된다.
이러한 체계를 통해 자바 SE에 포함되는 API와 자바 가상 머신의 규격이 투명하게 결정되고 관리된다. JCP의 표준화 작업은 자바 기술의 호환성과 지속 가능한 발전을 보장하는 핵심 기반이다. 결과적으로 자바 SE는 단일 벤더의 제품이 아닌, 국제 커뮤니티의 합의에 따라 진화하는 개방형 표준 플랫폼이 되었다.
